// 实现
// 备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。
// Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。
// 我们的演示类使用 CareTaker 和 Originator 对象来显示对象的状态恢复。
//之所以有管理备忘录的类,是为了符合迪米特原则
public class Memento {
	//状态备忘录
   private :
   String state;
 
   public :
	Memento(String state){
      this.state = state;
	}
	String getState(){
      return state;
	}  
}
public class Originator {
	//管理备忘录
   private :
   String state;
 
   public :
   void setState(String state){
      this.state = state;
   }
 
   String getState(){
      return state;
   }
 
   Memento saveStateToMemento(){
      return new Memento(state);
   }
 
   void getStateFromMemento(Memento Memento){
      state = Memento.getState();
   }
}
 
public class CareTaker {
	//使用Originator存储Memento的方法来存储状态序列，按序列索引取出状态
   private :
   list<Memento> mementoList = new list<Memento>();
 
   public :
   void add(Memento state){
      mementoList.add(state);
   }
   Memento get(int index){
      return mementoList.get(index);
   }
}

int main() 
{
  Originator originator = new Originator();
  CareTaker careTaker = new CareTaker();
  originator.setState("State #1");
  originator.setState("State #2");
  careTaker.add(originator.saveStateToMemento());
  originator.setState("State #3");
  careTaker.add(originator.saveStateToMemento());
  originator.setState("State #4");

  System.out.println("Current State: " + originator.getState());    
  originator.getStateFromMemento(careTaker.get(0));
  System.out.println("First saved State: " + originator.getState());
  originator.getStateFromMemento(careTaker.get(1));
  System.out.println("Second saved State: " + originator.getState());

}